package com.nunbey.lingxi.lincat.datastore;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class SqlHelper extends SQLiteOpenHelper {
    private final String createBookTableSQL = "create table book(book_id integer primary key autoincrement,author text,price real,pages integer,name text)";
    private final String createOrderTableSQL = "create table `order`(order_id integer primary key autoincrement,book_id integer,number integer,user_id integer)";
    /**
     * 构造函数
     * @param context 上下文
     * @param name 数据库名
     * @param factory 游标，用于返回查询结果，通常传Null
     * @param version 版本号
     */
    public SqlHelper(Context context,String name,SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * 在构造函数中会自动调用，通常将数据库表的创建工作在这里写
     * @param sqLiteDatabase
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(createBookTableSQL);
        sqLiteDatabase.execSQL(createOrderTableSQL);
    }

    /**
     * 用于项目数据库的版本控制，如1.0版本时仅创建了book表，但2.0时需要再创建order表
     * 那么1.0版本的数据库由于已经执行了onCreate方法，则不会再次执行，那么order表则无法创建成功
     * 对于2.0版本而言安装时则可调用onCreate方法执行。
     * 为了解决这个问题，再数据库版本号变化时，则会调用onUpgrade方法，当得知数据库版本号是1.0以下时
     * 则单独创建order表即可，无需再卸载软件重新安装，否则数据丢失。
     * @param sqLiteDatabase
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        if(newVersion<=1){
            sqLiteDatabase.execSQL(createOrderTableSQL);
        }
    }
}
